Repository navigation
feat(node): Add nodeScheduleIntegration to monitor node-schedule jobs - #25474
Merged
Merged
Conversation
This was referenced Oct 17, 2026
Contributor
size-limit report 📦Compared: 636d8a1 (PR test merge using develop at a3dae70) Against: a3dae70 (develop) · base run #64482 ✅ Baseline matches: this diff contains only this PR's changes.
|
Sends check-ins for every named node-cron task through the orchestrion createTask channel, with the task's schedule and time zone as monitor config when Sentry reads it the same way. Tasks without a name, and tasks wrapped by Sentry.cron.instrumentNodeCron, are skipped. Co-Authored-By: Claude <noreply@anthropic.com>
Prepares for other scheduler integrations; the helper also handles schedulers that run on either day field (cron-parser, cron). Co-Authored-By: Claude <noreply@anthropic.com>
The error event and the error check-in can arrive in either order. Co-Authored-By: Claude <noreply@anthropic.com>
…-in modules `bun run` can't inject channels into libraries. nodeCronIntegration is opt-in, so it has no lazy channel-integration definition. Co-Authored-By: Claude <noreply@anthropic.com>
Sends check-ins for every named job created with scheduleJob through the orchestrion channel injection. Cron strings (with their tz) are sent as the monitor config when Sentry reads them the same way; recurrence rules check in without a config. Unnamed and one-off jobs are skipped. Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
wedamija
force-pushed
the
danf/node-cron-monitor-jobs
branch
from
October 20, 2026 00:51
2c2c600 to
905ed6b
Compare
wedamija
force-pushed
the
danf/node-schedule-monitor-jobs
branch
from
October 20, 2026 00:51
b9c729a to
231f7bc
Compare
…reads differently node-cron 4.0 to 4.2 ship `dist/cjs` and `dist/esm` builds, which weren't instrumented. node-cron 3 keeps the values of a stepped field that are multiples of the step (`*/2` days run on 2, 4, ...), so those tasks now check in without a monitor config. Also moves the channel subscription and job filtering into shared helpers for the other scheduler integrations. Co-Authored-By: Claude <noreply@anthropic.com>
…t or end A rule limited by `start` or `end` doesn't run outside that window, so sending its schedule would report missed check-ins. Also uses the shared job-creation helpers. Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Contributor
Optional E2E testsSome optional checks were not successful. They do not block the merge. 2 not successful, 50 successful. See the run.
Successful checks
|
wedamija
marked this pull request as ready for review
October 22, 2026 00:24
wedamija
requested review from
JPeer264,
isaacs,
nicohrubec and
s1gr1d
and removed request for
a team
October 22, 2026 00:24
…r date strings Co-Authored-By: Claude <noreply@anthropic.com>
…e-schedule-monitor-jobs
…o wt-nodeschedule-fix # Conflicts: # packages/server-utils/test/orchestrion/moduleInjectedTransform.test.ts
…uled nodeScheduleIntegration kept sending the config from scheduleJob after rescheduleJob or job.reschedule, so Sentry reverted the monitor and reported false misses. Update the job's config when a reschedule succeeds.
…nds as 7 Each run of a monitored job gets its own trace, so runs no longer share one. A weekday range ending on Sunday (`sat-sun`, `5-0`) is sent as `6-7`, which Sentry accepts. Other reversed ranges get no monitor config, and node-cron 3 gets none for ranges ending on Sunday since it reads them differently.
JPeer264
approved these changes
Oct 28, 2026
JPeer264
left a comment
Member
There was a problem hiding this comment.
LGTM. I have one comment which might be worth fixing.
…o wt-cron-review-ns # Conflicts: # packages/server-utils/src/utils/cronMonitoring.ts
… before node-cron 4.6 node-cron 4.0-4.5 swaps reversed ranges, so `sat-sun` runs every day there. Only 4.6+ wraps it around to the weekend.
Hook Job#schedule instead of scheduleJob and reschedule, since both call it. Also test that instrumentNodeSchedule marks its callback as monitored.
…nitor-jobs # Conflicts: # packages/server-utils/src/utils/cronMonitoring.ts
JPeer264
approved these changes
Oct 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of a series adding automatic Crons monitoring for the most-used job schedulers in each SDK. Check-ins for a monitor that doesn't exist yet are dropped, so today each monitor has to be created by hand with its schedule copied from the code. Sending the job's schedule as the monitor config lets Sentry create the monitor and keep it in sync.
Adds
nodeScheduleIntegration, which sends check-ins for every namedscheduleJobjob (node-schedule1.3+ and 2.x) with its cron string andtzas the monitor config. It replaces wrapping the module inSentry.cron.instrumentNodeSchedule. Adding the integration is the opt-in. Jobs without a name and one-offDatejobs aren't monitored.Recurrence rules, rules with a
startorend, and schedules Crons can't express, like every 10 seconds, aren't monitored. Jobs already wrapped byinstrumentNodeScheduleare skipped.Stacked on #25473.